package hao.bk.royalmap;

import hao.bk.parking.ParkingLayout;
import hao.bk.royalmap.ImageMap.Area;
import hao.bk.searchMap.SearchMapLayout;
import hao.bk.sql.bo.Location;
import hao.bk.sql.bo.Point;
import hao.bk.sql.dao.LocationDAO;
import hao.bk.sql.dao.PointDao;
import hao.bk.sql.sqlutils.SQLiteHelper;
import hao.bk.utils.CharactersMark;
import hao.bk.utils.Constants;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Looper;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.webkit.WebView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

public class RoyalMapActivity extends Activity implements
		OnClickListener {

	private static RoyalMapActivity instance;
	/***
	 * Khởi tạo activity chạy ứng dụng
	 */
	public static Typeface fontSegoeUi;
	/** Font segoe UI semilight*/
	public static Typeface fontSegoeUiSemiLight;
	/** Font segoe italic */
	public static Typeface fontSegoeI;
	/** Font segoe bold */
	public static Typeface fontSegoeB;
	
	public OnBackPressedInterface onBackPressedInterface;
	
	public LinearLayout footer;
	public FooterButton btnParking;
	public FooterButton btnMap;
	public FooterButton btnSearch;
	private Toast mToast;
	/**Sử dụng tính năng chụp ảnh   */
	private static final int CAMERA_REQUEST = 1888;
	/** Trạng thái các button trên footer */
	public static final int TAB_HOME = 1;
	public static final int TAB_PARKING = 2;
	public static final int TAB_SEARCH = 3;
	public static final int TAB_WEB = 4;
	public static final int TAB_FEED_BACK = 5;
	/** Biến trạng thái lưu thông tin tab activi */
	protected int tabStatus = TAB_HOME;
	/** Biến trạng thái cũ của tab activi */
	protected int preTabStatus = tabStatus;
	/** Tab Parking */
	public ParkingLayout parking;
	public SlidingMenuLayout slideMenu;
	/** tìm kiếm nhanh trên bản đồ  */
	public SearchFaster searchFaster;
	/** Phương tiện công cộng */
	public PublicTransportLayout publicTransport;
	/** Giao diện thông tin tìm vị trí đỗ xe */
	public LinearLayout lookingVehicleLnl;
	/** Các textView thông tin */
	TextView viTriDoXe, awayLookingVehicle;
	/** Search nhanh các vị trí */
	/**ArrayList lưu các cửa hàng, địa điểm cho tính năng search nhanh  */
	public ArrayList<String> listLocation = new ArrayList<String>();
	/**  Cờ hiển thị fasterSearch */
	public boolean fasterSearchIsView = false;
	/**  Đếm số ảnh đã chụp, lưu lại vị trí đỗ xe */
	public int countFoto = 0;
	/** lưu các ảnh chụp vào sdcard, 
	     takePhoto = 1, 2,3 */
	public int takePhoto;
	
	/** Tab vị trí */
	public SearchMapLayout searchMap;
	/** Linear hiển thị vị trí hiện tại, muốn đến */
	public LinearLayout fromToAddresslnl;
	public TextView viTriHienTai, vitriMuonDen;
	/**vị trí hiện tại hoặc muốn đến thuộc tầng nào  */
	public String floorFromPosition="", floorToPosition="";
	
	/** Các widget trong layout Gửi phản hồi */
	public LinearLayout sendFeedBack;
	public RadioButton rbChayTot, rbKem, rbKoOnDinh;
	public RadioGroup rdgFeedback;
	public Button btnGuiPhanHoi;
	public String sms1 = "From ResApp user:Ứng dụng hoạt động tốt";
	public String sms2 = "From ResApp user:Ứng dụng hoạt động kém, thường xuyên có lỗi";
	public String sms3 = "From ResApp user:Ứng dụng hoạt động không ổn định";
	
	/** WebVew Trang chủ Royal city  */
	public WebView webRoyalcity;
	/** Lưu các vị trí được click hoặc chọn để hiện thị bubbles thông tin    */
	public ArrayList<Integer> clicked = new ArrayList<Integer>();
	/** Lưu các điểm đã click, hiện tại, muốn đến */
	public int currentlyLocation = 0, toLocation = 0, clickedLocation;
	// Lưu vị trí trong clicked phục vụ cho chức năng xóa Bubbles
	public int idClicked = 0;
	public ImageMap mapB1;
	public ImageMap mapB2;
	//map đang hiển thị
	public ImageMap mapViewing;
	public LinearLayout fullTransperentLnl;
	public Button select_map;
	public Button select_menu;
	public Button select_gone_menu;
	public Button btnTakePhoto;
	/** Cờ =true cho biết Map B1 hoặc B2 được hiển thị
	   		thay vì slide Menu hay Public Transport */
	public boolean flagViewMap = true;
	/** Cờ cho phép chỉ đường nếu có 2 vị trí hiện tại và điểm muốn đến  */
	public boolean flagDirection = false;
	/**Cờ cho phép xóa dẫn đường  */
	public boolean cancelDanDuong = false;
	/**
	 * dinh nghia cac map b1,b2 dc hien thi
	 */
	public static final int MAP_B1 = 0;
	public static final  int MAP_B2 = 1;
	protected int activemap = MAP_B1;
	/** List cac diem re de dan duong    */
	public ArrayList<Point> paths = new ArrayList<Point>();
	
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		instance = this;
		setContentView(R.layout.main);
		/** Vấn đề là ở đây, chưa khởi tạo DB, quá hay */
		SQLiteHelper sqLiteHelper = new SQLiteHelper(instance);
		sqLiteHelper.createDataBase();
		fontSegoeUi = Typeface.createFromAsset(getAssets(),
				Constants.FONT_NAME_SEGOE_UI);
		fontSegoeI = Typeface.createFromAsset(getAssets(),
				Constants.FONT_NAME_SEGOE_I);
		fontSegoeB = Typeface.createFromAsset(getAssets(),
				Constants.FONT_NAME_SEGOE_B);
		fontSegoeUiSemiLight = Typeface.createFromAsset(getAssets(),
				Constants.FONT_NAME_SEGOE_SM);
		
		/** Lay ve list cac diem re trong db  */
		getListPaths();
		footer = (LinearLayout) findViewById(R.id.footer_control);
		btnParking = (FooterButton)findViewById(R.id.footer_btn_parking);
		btnParking.setText(getResources().getString(R.string.footer_btn_parking));
		btnParking.setOnClickListener(this);
		btnMap = (FooterButton)findViewById(R.id.footer_btn_map);
		btnMap.setText(getResources().getString(R.string.footer_btn_map));
		btnMap.setOnClickListener(this);
		btnSearch = (FooterButton)findViewById(R.id.footer_btn_search);
		btnSearch.setText(getResources().getString(R.string.footer_btn_search));
		btnSearch.setOnClickListener(this);
		btnMap.setFooterFocus(true);
		parking = (ParkingLayout)findViewById(R.id.parking);
		slideMenu = (SlidingMenuLayout)findViewById(R.id.sliding_menu);
		searchFaster = (SearchFaster)findViewById(R.id.search_faster_lnl);
		publicTransport = (PublicTransportLayout)findViewById(R.id.public_transport);
		lookingVehicleLnl = (LinearLayout)findViewById(R.id.looking_vehicle_ui);
		lookingVehicleLnl.setOnClickListener(this);
		viTriDoXe = (TextView)findViewById(R.id.vitri_do_xe_info);
		awayLookingVehicle = (TextView)findViewById(R.id.away_looking_vehicle);
		/** Layout hiển thị các vị trí hiện tại, muốn đến   */
		fromToAddresslnl = (LinearLayout)findViewById(R.id.from_to_address_lnl);
		fromToAddresslnl.setOnClickListener(this);
		viTriHienTai = (TextView)findViewById(R.id.from_adrress_);
		vitriMuonDen = (TextView)findViewById(R.id.to_adrress_);
		findFeedBack();
		webRoyalcity = (WebView)findViewById(R.id.webRoyal);
		searchMap = (SearchMapLayout)findViewById(R.id.searchMap);
		mapB1 = (ImageMap)findViewById(R.id.map_b1);
		 // chèn sự kiện khi click vào bản đồ
        mapB1.addOnImageMapClickedHandler(new ImageMap.OnImageMapClickedHandler() {
			@Override
			public void onImageMapClicked(int id) {
				// khi 1 vùng được click vào, hiện thông tin dạng bubble
				boolean loopClicked = false;
				if(clicked.size() >0) {
					for (int i = 1; i <= clicked.size(); i++) {
						if(clicked.get(i-1) == id) {
							loopClicked = true;
							break;
						}
				}
				
			}
				if(loopClicked == false) {
					mapB1.showBubble(id);
					clicked.add(id);	
				}
				
			}
			@Override
			public void onBubbleClicked(int id) {
				idClicked = 0;
				// trả lại thông tin cho vùng bị click		
				while(clicked.get(idClicked) != id) {
					idClicked++;
				}
				clickedLocation = id;
				/** Nếu cho phép hủy tuyến đường thì sẽ ẩn Dialog */
				if(cancelDanDuong == true) {
					clicked.remove(idClicked);
				 	mapB1.mBubbleMap.clear();
				 	mapB1.invalidate();
				 	if(idClicked != 0) {
				 		for(int i : clicked) {
					 		mapB1.showBubble(i);							 
					 	}
				 		idClicked = 0;
				 	}
				 	return;
				}

				/**  Hiện dialog cho phép đánh dấu địa điểm khi clicked vào Bubble*/
				
				AlertDialog.Builder alertDialog = new AlertDialog.Builder(RoyalMapActivity.this);
					 // Cho flag = false để xóa đường đã vẽ
					 //mapB1.paintPath = false;
					 final String nameLocation = mapB1.getNameViaId(id);
				 	 alertDialog.setTitle(nameLocation);
					 alertDialog.setMessage("Lưu địa điểm này là ?");
					 alertDialog.setIcon(R.drawable.royalmap_icon);
					 alertDialog.setPositiveButton("Hiện tại",
					 new DialogInterface.OnClickListener() {
					 public void onClick(DialogInterface dialog,
					 int which) {
						 currentlyLocation = clickedLocation;
						 addIsCurrentLocation(nameLocation, 1); // 1, điểm thuộc tầng B1
						 idClicked = 0;
					 }
					 });
					 alertDialog.setNeutralButton("Muốn đến",
					 new DialogInterface.OnClickListener() {
					 
					 public void onClick(DialogInterface dialog,
						 int which) {
						 	toLocation = clickedLocation;
						 	addIsToLocation(nameLocation, 1); // 1, điểm thuộc tầng B1
						 	idClicked = 0;
						 }
					 });
					 alertDialog.setNegativeButton("Xóa",
					 new DialogInterface.OnClickListener() {
					 
						public void onClick(DialogInterface dialog,
						 int which) {	
							if(clickedLocation == toLocation) {
								toLocation = 0;
								flagDirection = false;
								vitriMuonDen.setVisibility(View.GONE);
								btnMap.setText("Bản đồ");
							}
							if(clickedLocation == currentlyLocation) {
								currentlyLocation = 0;
								flagDirection = false;
								viTriHienTai.setVisibility(View.GONE);
								btnMap.setText("Bản đồ");
							}
							if(toLocation == 0 && currentlyLocation == 0) {
								fromToAddresslnl.setVisibility(View.GONE);
								GeneralAnimationUtils.startRightToLeft(fromToAddresslnl, fullTransperentLnl);
							}
						 	clicked.remove(idClicked);
						 	mapB1.mBubbleMap.clear();
						 	mapB1.invalidate();
						 	if(idClicked != 0) {
						 		for(int i : clicked) {
							 		mapB1.showBubble(i);							 
							 	}
						 		idClicked = 0;
						 	}
						 	
						 }
					 });
					 alertDialog.show();
			}
		});
        mapB2 = (ImageMap)findViewById(R.id.map_b2);
        mapB2.addOnImageMapClickedHandler(new ImageMap.OnImageMapClickedHandler() {
        	@Override
			public void onImageMapClicked(int id) {
				// khi 1 vùng được click vào, hiện thông tin dạng bubble
				boolean loopClicked = false;
				if(clicked.size() >0) {
					for (int i = 1; i <= clicked.size(); i++) {
						if(clicked.get(i-1) == id) {
							loopClicked = true;
							break;
						}
				}
				
			}
				if(loopClicked == false) {
					mapB2.showBubble(id);
					clicked.add(id);	
				}
				
			}
			@Override
			public void onBubbleClicked(int id) {
				idClicked = 0;
				// trả lại thông tin cho vùng bị click		
				while(clicked.get(idClicked) != id) {
					idClicked++;
				}
				clickedLocation = id;
				/** Nếu cho phép hủy tuyến đường thì sẽ ẩn Dialog */
				if(cancelDanDuong == true) {
					clicked.remove(idClicked);
				 	mapB2.mBubbleMap.clear();
				 	mapB2.invalidate();
				 	if(idClicked != 0) {
				 		for(int i : clicked) {
					 		mapB2.showBubble(i);							 
					 	}
				 		idClicked = 0;
				 	}
				 	return;
				}

				/**  Hiện dialog cho phép đánh dấu địa điểm khi clicked vào Bubble*/
				
				AlertDialog.Builder alertDialog = new AlertDialog.Builder(RoyalMapActivity.this);
					 // Cho flag = false để xóa đường đã vẽ
					 //mapB1.paintPath = false;
					 final String nameLocation = mapB2.getNameViaId(id);
				 	 alertDialog.setTitle(nameLocation);
					 alertDialog.setMessage("Lưu địa điểm này là ?");
					 alertDialog.setIcon(R.drawable.royalmap_icon);
					 alertDialog.setPositiveButton("Hiện tại",
					 new DialogInterface.OnClickListener() {
					 public void onClick(DialogInterface dialog,
					 int which) {
						 currentlyLocation = clickedLocation;
						 addIsCurrentLocation(nameLocation, 2); // 1, điểm thuộc tầng B1
						 idClicked = 0;
					 }
					 });
					 alertDialog.setNeutralButton("Muốn đến",
					 new DialogInterface.OnClickListener() {
					 
					 public void onClick(DialogInterface dialog,
						 int which) {
						 	toLocation = clickedLocation;
						 	addIsToLocation(nameLocation, 2);// 1, điểm thuộc tầng B1
						 	idClicked = 0;
						 }
					 });
					 alertDialog.setNegativeButton("Xóa",
					 new DialogInterface.OnClickListener() {
					 
						public void onClick(DialogInterface dialog,
						 int which) {	
							if(clickedLocation == toLocation) {
								toLocation = 0;
								flagDirection = false;
								vitriMuonDen.setVisibility(View.GONE);
								btnMap.setText("Bản đồ");
							}
							if(clickedLocation == currentlyLocation) {
								currentlyLocation = 0;
								flagDirection = false;
								viTriHienTai.setVisibility(View.GONE);
								btnMap.setText("Bản đồ");
							}
							if(toLocation == 0 && currentlyLocation == 0) {
								fromToAddresslnl.setVisibility(View.GONE);
								GeneralAnimationUtils.startRightToLeft(fromToAddresslnl, fullTransperentLnl);
							}
						 	clicked.remove(idClicked);
						 	mapB2.mBubbleMap.clear();
						 	mapB2.invalidate();
						 	if(idClicked != 0) {
						 		for(int i : clicked) {
							 		mapB2.showBubble(i);							 
							 	}
						 		idClicked = 0;
						 	}
						 	
						 }
					 });
					 alertDialog.show();
			}
		});
	    activemap = MAP_B1;
		select_map = (Button)findViewById(R.id.select_map);
		select_map.setOnClickListener(this);
		select_menu = (Button) findViewById(R.id.view_menu);
		select_menu.setOnClickListener(this);
		fullTransperentLnl = (LinearLayout)findViewById(R.id.full_transperent_lnl);
	
	}
	/** Feed Back*/
	public void findFeedBack() {
		sendFeedBack = (LinearLayout)findViewById(R.id.feedBack);
		rdgFeedback = (RadioGroup) findViewById(R.id.radiogroup);
		rbChayTot = (RadioButton) findViewById(R.id.rbChaytot);
		rbKem = (RadioButton) findViewById(R.id.rbKem);
		rbKoOnDinh = (RadioButton) findViewById(R.id.rbKhongOnDinh);
		btnGuiPhanHoi = (Button) findViewById(R.id.btnDanhGiaPhanHoi);
		btnGuiPhanHoi.setOnClickListener(this);
	}
	public void getListPaths() {
		/**  khởi tạo DB */
		SQLiteHelper sqLiteHelper = new SQLiteHelper(this);
		sqLiteHelper.createDataBase();
		PointDao pointDao = new PointDao(this);
		paths = pointDao.getPointDB();
		
	}
	/** các phương thức thêm vị trí thành địa điểm hiện tại, muốn đến, hoặc xóa  */
	public void addIsCurrentLocation(String nameLocation, int floor) {
		// chưa cho phép dẫn đường
		 flagDirection = false;
		 //floor =1, điểm thuộc tầng B1, = 2 điểm thuộc tầng B2
		 if(floor == 1) {
			 mapB1.paintPath = false;
			 btnMap.setText(getResources().getString(R.string.footer_btn_map));
			 if(fromToAddresslnl.getVisibility() != View.VISIBLE) {
				 fromToAddresslnl.setVisibility(View.VISIBLE);
				 GeneralAnimationUtils.startLeftToRight(fullTransperentLnl, fromToAddresslnl);
			 }
			 if(toLocation == 0 || currentlyLocation == toLocation) {
				 vitriMuonDen.setVisibility(View.GONE);
			 }
			 viTriHienTai.setVisibility(View.VISIBLE);
			 GeneralAnimationUtils.startLeftToRight(fullTransperentLnl, viTriHienTai);
			 floorFromPosition = "B1";
			 viTriHienTai.setText("Hiện tại: " + nameLocation+ " - " + floorFromPosition);
			
			 /** Kiểm tra nếu có đủ 2 địa điểm đầu
			   cuối thì thực hiện chức năng dẫn đường  */
			 danDuong();
			 mapB1.invalidate();
			 
		 }else if(floor == 2){
			 mapB2.paintPath = false;
			 btnMap.setText(getResources().getString(R.string.footer_btn_map));
			 if(fromToAddresslnl.getVisibility() != View.VISIBLE) {
				 fromToAddresslnl.setVisibility(View.VISIBLE);
				 GeneralAnimationUtils.startLeftToRight(fullTransperentLnl, fromToAddresslnl);
			 }
			 if(toLocation == 0 || currentlyLocation == toLocation) {
				 vitriMuonDen.setVisibility(View.GONE);
			 }
			 viTriHienTai.setVisibility(View.VISIBLE);
			 GeneralAnimationUtils.startLeftToRight(fullTransperentLnl, viTriHienTai);
			 floorFromPosition = "B2";
			 viTriHienTai.setText("Hiện tại: " + nameLocation+ " - " +floorFromPosition);
			
			 /** Kiểm tra nếu có đủ 2 địa điểm đầu
			   cuối thì thực hiện chức năng dẫn đường  */
			 danDuong();
			 mapB2.invalidate();
		 }
		 
	}
	public void addIsToLocation(String nameLocation, int floor) {
		// chưa cho phép dẫn đường
	 	flagDirection = false;
	 	//floor =1, điểm thuộc tầng B1, = 2 điểm thuộc tầng B2
	 	if(floor == 1) {
	 		mapB1.paintPath = false;
		 	btnMap.setText(getResources().getString(R.string.footer_btn_map));
			if(fromToAddresslnl.getVisibility() != View.VISIBLE) {
				 fromToAddresslnl.setVisibility(View.VISIBLE);
				 GeneralAnimationUtils.startLeftToRight(fullTransperentLnl, fromToAddresslnl);
			 }	
			 if(currentlyLocation == 0 || currentlyLocation == toLocation) {
				 viTriHienTai.setVisibility(View.GONE);
			 }
			 vitriMuonDen.setVisibility(View.VISIBLE);
			 GeneralAnimationUtils.startLeftToRight(fullTransperentLnl, vitriMuonDen);
			 floorToPosition  = "B1";
			 vitriMuonDen.setText("Muốn đến: " + nameLocation + " - " + floorToPosition);
			/** Kiểm tra nếu có đủ 2 địa điểm đầu
		   	cuối thì thực hiện chức năng dẫn đường  */
			danDuong();
			mapB1.invalidate();
			
	 	} else if(floor == 2) {
	 		mapB2.paintPath = false;
		 	btnMap.setText(getResources().getString(R.string.footer_btn_map));
			if(fromToAddresslnl.getVisibility() != View.VISIBLE) {
				 fromToAddresslnl.setVisibility(View.VISIBLE);
				 GeneralAnimationUtils.startLeftToRight(fullTransperentLnl, fromToAddresslnl);
			 }	
			 if(currentlyLocation == 0 || currentlyLocation == toLocation) {
				 viTriHienTai.setVisibility(View.GONE);
			 }
			 vitriMuonDen.setVisibility(View.VISIBLE);
			 GeneralAnimationUtils.startLeftToRight(fullTransperentLnl, vitriMuonDen);
			 floorToPosition  = "B2";
			 vitriMuonDen.setText("Muốn đến: " + nameLocation + " - " + floorToPosition);
			/** Kiểm tra nếu có đủ 2 địa điểm đầu
		   	cuối thì thực hiện chức năng dẫn đường  */
			danDuong();
			mapB2.invalidate();
	 	}
	 	
	}
	public static RoyalMapActivity getInstance(){
		return instance;
	}
	/**
	 * Bắt sự kiện click phím back
	 */
	@Override
	public void onBackPressed() {
		
		if (getTabStatus() == TAB_HOME) {
			/** Hiển thị dialog xác nhận thoát ứng dụng*/
			AlertDialog.Builder alertDialog = new AlertDialog.Builder(RoyalMapActivity.this);
			 alertDialog.setTitle("Thoát Royal city Map ?");
			 alertDialog.setMessage("Bạn có thực sự muốn thoát ?");
			 alertDialog.setIcon(R.drawable.royalmap_icon);
			 alertDialog.setPositiveButton("Đồng ý",
			 new DialogInterface.OnClickListener() {
			 
			 public void onClick(DialogInterface dialog,
			 int which) {
				 //Thoát khỏi ứng dụng
				finish();
			 }
			 });

			 alertDialog.setNegativeButton("Trở lại",
			 new DialogInterface.OnClickListener() {
			 
				public void onClick(DialogInterface dialog,
				 int which) {	
					
				 }
			 });
			 alertDialog.show();
		} else if (getTabStatus() == TAB_PARKING) {
			
			if (onBackPressedInterface != null) {
				//Toast.makeText(instance, "kaka", Toast.LENGTH_SHORT).show();
				onBackPressedInterface.onBackPressed();		
			}
			setPreTabStatus(TAB_HOME);
		} else if (getTabStatus() == TAB_SEARCH) {
			if (onBackPressedInterface != null) {
				onBackPressedInterface.onBackPressed();
			}
			setPreTabStatus(TAB_HOME);
		} else if (getTabStatus() == TAB_WEB) {
			tabStatus = TAB_HOME;
			btnMap.setText("Bản đồ");
			GeneralAnimationUtils.startRightToLeft(webRoyalcity, mapViewing);
			webRoyalcity.setVisibility(View.GONE);
		} else {
			super.onBackPressed();
		}
	}

	/**   Kiểm tra, nếu đủ 2 vị trí đến và đi thì cho phép tìm đường */
	public void danDuong() {
		
			if(currentlyLocation != 0 && toLocation != 0 && currentlyLocation != toLocation) {
				clicked.clear();
				mapB1.mBubbleMap.clear();
				mapB1.invalidate();
				clicked.add(currentlyLocation);
				clicked.add(toLocation);
				for(int i : clicked) {
					mapB1.showBubble(i);
				}
				flagDirection = true;
				btnMap.setText(getResources().getString(R.string.footer_btn_direction));
				
			} else {

	  }
		
	}
	/** Cho phép dẫn đường khi 2 điểm hiện tại và muốn đến thuộc cùng 1 tầng */
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		returnMapView();

		int id = v.getId();
		switch (id) {
		case R.id.footer_btn_parking:
			if(returnFlagViewMap() == true) {
				clickParking();
			} else if(returnFlagViewMap() == false) {

				String text = this.getResources().getString(R.string.toast_gui_close_menu);
				showToastCustom(text);
			}
			break;

		case R.id.footer_btn_map:
			clickMap();
			break;
		case R.id.footer_btn_search:
			if(returnFlagViewMap() == true) {
				clickSearch();
			}else if(returnFlagViewMap() == false) {
				String text = this.getResources().getString(R.string.toast_gui_close_menu);
				showToastCustom(text);
			}
			break;
		case R.id.select_map:  
			// khi nhấn nút chuyển map
			/** ẩn tìm kiếm nhanh nếu đang hiển thị */
			if(fasterSearchIsView == true) {
				searchFaster.setVisibility(View.GONE);
				GeneralAnimationUtils.startTopToBottom(searchFaster);
				btnMap.setText("Bản đồ");
				fasterSearchIsView = false;
			}
			convertMap();
			break;
		case R.id.view_menu:
			/** ẩn tìm kiếm nhanh nếu đang hiển thị */
			if(fasterSearchIsView == true) {
				searchFaster.setVisibility(View.GONE);
				GeneralAnimationUtils.startTopToBottom(searchFaster);
				btnMap.setText("Bản đồ");
				fasterSearchIsView = false;
			}
			flagViewMap = false;
			showSlideMenu();
			break;
		case R.id.public_transport_lnl:
			goneMenu();		
			break;
		case R.id.from_to_address_lnl:
			//ẩn layout hiển thị thông tin các điểm from, to
			fromToAddresslnl.setVisibility(View.GONE);
			GeneralAnimationUtils.startRightToLeft(fromToAddresslnl, fullTransperentLnl);
			break;
		case R.id.looking_vehicle_ui:
			lookingVehicleLnl.setVisibility(View.GONE);
			GeneralAnimationUtils.startRightToLeft(lookingVehicleLnl, fullTransperentLnl);
			select_map.setVisibility(View.VISIBLE);
			select_menu.setVisibility(View.VISIBLE);
			returnMapView().invalidate();
			break;
		case R.id.btnDanhGiaPhanHoi:
			
			int check = rdgFeedback.getCheckedRadioButtonId();
			switch (check) {
				case R.id.rbChaytot:
					
					sendSMS(sms1);	
					break;
				case R.id.rbKhongOnDinh:
				
					sendSMS(sms3);
					break;
				case R.id.rbKem:
				
					sendSMS(sms2);
					break;
			}
			break;
		default:
			break;
		}
	}
	private void sendSMS(String sms) {
		// String phone = "01649730267";
		
		Intent smsIntent = new Intent(Intent.ACTION_SENDTO,
				Uri.parse("sms:01649730267"));
		smsIntent.putExtra("sms_body", sms);
		startActivity(smsIntent);
		
	}
	/**  Hiển thị Toast custom */
	public void showToastCustom(String text) {
		LayoutInflater inflater = getLayoutInflater();			    
		View mToastView = inflater.inflate(R.layout.custom_toast, null);  
		TextView infoToast = (TextView) mToastView.findViewById(R.id.info_toast);
		infoToast.setText(text);
	    mToast = new Toast(this);
	    mToast.setView(mToastView);
	    mToast.setDuration(Toast.LENGTH_SHORT);
	    mToast.show();
	}
	/**
	 * Lấy về map đang hiển thị
	 */
	public ImageMap returnMapView() {
		if(activemap == MAP_B1) {
			mapViewing = mapB1;
		} else if(activemap == MAP_B2) {
			mapViewing = mapB2;
		}
		return mapViewing;
	} 
	/**
	 * show slide menu
	 */
	public void showSlideMenu() {
		slideMenu.setVisibility(View.VISIBLE);
		slideMenu.showSlideMenu();
		select_menu.setVisibility(View.GONE);
		select_map.setVisibility(View.GONE);
		GeneralAnimationUtils.startRightToLeft(slideMenu, slideMenu);
	}
	
	public void goneMenu() {
		slideMenu.setVisibility(View.GONE);
		GeneralAnimationUtils.startLeftToRight(slideMenu, fullTransperentLnl);
		select_map.setVisibility(View.VISIBLE);
		select_menu.setVisibility(View.VISIBLE);
	}
	/** Truy cập vào thông tin khuyến mãi, do trang chủ Royal chưa có hỗ trợ đọc tin
	    Qua RSS  */
	public void showPromotion() {
		slideMenu.setVisibility(View.GONE);
		webRoyalcity.setVisibility(View.VISIBLE);
		GeneralAnimationUtils.startLeftToRight(slideMenu, webRoyalcity);
		btnMap.setText("Back");
		tabStatus = TAB_WEB;
		webRoyalcity.getSettings().setJavaScriptEnabled(true);
		webRoyalcity.loadUrl("http://vincomshoppingmall.com/vi-VN/Vincommegaroyalcity/Promotion-478");
	}
	/**  Truy cập vào trang chủ */
	public void showWebRoyal() {
		
		slideMenu.setVisibility(View.GONE);
		webRoyalcity.setVisibility(View.VISIBLE);
		GeneralAnimationUtils.startLeftToRight(slideMenu, webRoyalcity);
		btnMap.setText("Back");
		tabStatus = TAB_WEB;
		webRoyalcity.getSettings().setJavaScriptEnabled(true);
		webRoyalcity.loadUrl("http://royalcity.com.vn/");
	}
	public void showFeedBack() {
		tabStatus = TAB_FEED_BACK;
		slideMenu.setVisibility(View.GONE);
		GeneralAnimationUtils.startLeftToRight(slideMenu, sendFeedBack);
		btnMap.setText("Back");
		sendFeedBack.setVisibility(View.VISIBLE);
		
	}
	/**Thông tin về phương tiện công cộng */
	public void showPublicTransport() {
		slideMenu.setVisibility(View.GONE);
		publicTransport.setVisibility(View.VISIBLE);
		publicTransport.showPublicTransport();
		GeneralAnimationUtils.startRightToLeft(publicTransport, publicTransport);
	}
	/** Hiển thị giao diện thông tin tìm xe */
	public void showLookingVehicle() {
		flagViewMap = true;
		//Lấy thông tin về vị trí để xe trong sdcard
		String sdcard=Environment
				 .getExternalStorageDirectory()
				 .getAbsolutePath()+"/royalsaveinfo.txt";
		try {
			 Scanner scan=new Scanner(new File(sdcard));
			 String line="";
			 while(scan.hasNext())
			 {
				 line = scan.nextLine();
				 String[] strings = TextUtils.split(line, ";");
				 	if(strings.length > 4) {
				 		String info = "Tầng " + strings[0] + " cổng vào " + strings[1] + " bãi đỗ " +
				 				strings[2] + " - " + strings[3];
				 		viTriDoXe.setText(info);
				 		if(strings[1].compareToIgnoreCase("R1") == 0) {
				 			String nameArea = "Thang cuốn R1";
				 			//Lấy ra id vùng biểu diễn của thang cuốn R1
				 			int idArea = mapB1.getIdAreaViaName(nameArea);
				 			clicked.clear();
				 			mapB1.mBubbleMap.clear();
				 			mapB1.invalidate();
				 			clicked.add(idArea);
				 			mapB1.showBubble(idArea);
				 			if(currentlyLocation != 0) {
				 				clicked.add(currentlyLocation);
				 				mapB1.showBubble(currentlyLocation);
				 				mapB1.guidePath(currentlyLocation, idArea);
				 				cancelDanDuong = true;
				 				btnMap.setText("Hủy bỏ");
								mapB1.invalidate();
				 			}
				 			
				 			// hiện marker thang cuốn R1, dẫn đường nếu có điểm hiện tại
				 			awayLookingVehicle.setText("Nhanh nhất: Đi xuống từ thang cuốn R1");
				 			
				 		}else if(strings[1].compareToIgnoreCase("R2") == 0) {
				 			String nameArea = "Thang cuốn R2";
				 			//Lấy ra id vùng biểu diễn của thang cuốn R2
				 			int idArea = mapB1.getIdAreaViaName(nameArea);
				 			clicked.clear();
				 			clicked.add(idArea);
				 			mapB1.mBubbleMap.clear();
				 			mapB1.invalidate();
				 			mapB1.showBubble(idArea);
				 			mapB1.showBubble(idArea);
				 			if(currentlyLocation != 0) {
				 				clicked.add(currentlyLocation);
				 				mapB1.showBubble(currentlyLocation);
				 				mapB1.guidePath(currentlyLocation, idArea);
				 				cancelDanDuong = true;
				 				btnMap.setText("Hủy bỏ");
								mapB1.invalidate();
				 			}
				 			// hiện marker thang cuốn R1, dẫn đường nếu có điểm hiện tại
				 			awayLookingVehicle.setText("Nhanh nhất: Đi xuống từ thang cuốn R2");
				 			
				 		}else if(strings[1].compareToIgnoreCase("R3") == 0){
				 			String nameArea = "Thang cuốn R3";
				 			//Lấy ra id vùng biểu diễn của thang cuốn R3
				 			int idArea = mapB1.getIdAreaViaName(nameArea);
				 			clicked.clear();
				 			mapB1.mBubbleMap.clear();
				 			mapB1.invalidate();
				 			clicked.add(idArea);
				 			mapB1.showBubble(idArea);
				 			if(currentlyLocation != 0) {
				 				clicked.add(currentlyLocation);
				 				mapB1.showBubble(currentlyLocation);
				 				mapB1.guidePath(currentlyLocation, idArea);
				 				cancelDanDuong = true;
				 				btnMap.setText("Hủy bỏ");
								mapB1.invalidate();
				 			}
				 			if(currentlyLocation != 0) {
				 				mapB1.showBubble(currentlyLocation);
				 				mapB1.guidePath(currentlyLocation, idArea);
				 				cancelDanDuong = true;
				 				btnMap.setText("Hủy bỏ");
								mapB1.invalidate();
				 			}
				 			// hiện marker thang cuốn R1, dẫn đường nếu có điểm hiện tại
				 			awayLookingVehicle.setText("Nhanh nhất: Đi xuống từ thang cuốn R3");
				 			
				 		}else if(strings[1].compareToIgnoreCase("R4") == 0) {
				 			// hiện marker thang cuốn R1, dẫn đường nếu có điểm hiện tại
				 			String nameArea = "Thang cuốn R4";
				 			//Lấy ra id vùng biểu diễn của thang cuốn R4
				 			int idArea = mapB1.getIdAreaViaName(nameArea);
				 			clicked.clear();
				 			mapB1.mBubbleMap.clear();
				 			mapB1.invalidate();
				 			clicked.add(idArea);
				 			mapB1.showBubble(idArea);
				 			if(currentlyLocation != 0) {
				 				clicked.add(currentlyLocation);
				 				mapB1.showBubble(currentlyLocation);
				 				mapB1.guidePath(currentlyLocation, idArea);
				 				cancelDanDuong = true;
				 				btnMap.setText("Hủy bỏ");
								mapB1.invalidate();
				 			}
				 			awayLookingVehicle.setText("Nhanh nhất: Đi xuống từ thang cuốn R4");
				 			
				 		} else if(strings[1].compareToIgnoreCase("R5") == 0){
				 			// hiện marker thang cuốn R1, dẫn đường nếu có điểm hiện tại
				 			String nameArea = "Thang cuốn R5";
				 			//Lấy ra id vùng biểu diễn của thang cuốn R5
				 			int idArea = mapB1.getIdAreaViaName(nameArea);
				 			clicked.clear();
				 			mapB1.mBubbleMap.clear();
				 			mapB1.invalidate();
				 			clicked.add(idArea);
				 			mapB1.showBubble(idArea);
				 			if(currentlyLocation != 0) {
				 				clicked.add(currentlyLocation);
				 				mapB1.showBubble(currentlyLocation);
				 				mapB1.guidePath(currentlyLocation, idArea);
				 				cancelDanDuong = true;
				 				btnMap.setText("Hủy bỏ");
								mapB1.invalidate();
				 			}
				 			awayLookingVehicle.setText("Nhanh nhất: Đi xuống từ thang cuốn R5");
				 			
				 		}  else if(strings[1].compareToIgnoreCase("R6") == 0){
				 			// hiện marker thang cuốn R1, dẫn đường nếu có điểm hiện tại
				 			String nameArea = "Thang cuốn R6";
				 			//Lấy ra id vùng biểu diễn của thang cuốn R6
				 			int idArea = mapB1.getIdAreaViaName(nameArea);
				 			clicked.clear();
				 			mapB1.mBubbleMap.clear();
				 			mapB1.invalidate();
				 			clicked.add(idArea);
				 			mapB1.showBubble(idArea);
				 			if(currentlyLocation != 0) {
				 				clicked.add(currentlyLocation);
				 				mapB1.showBubble(currentlyLocation);
				 				mapB1.guidePath(currentlyLocation, idArea);
				 				cancelDanDuong = true;
				 				btnMap.setText("Hủy bỏ");
								mapB1.invalidate();
				 			}
				 			awayLookingVehicle.setText("Nhanh nhất: Đi xuống từ thang cuốn R6");
				 		}
				 		
				 	}
				 break;
			 }
			 scan.close();
			
			 } catch (FileNotFoundException e) {
			 e.printStackTrace();
			 }
		slideMenu.setVisibility(View.GONE);
		lookingVehicleLnl.setVisibility(View.VISIBLE);
		GeneralAnimationUtils.startLeftToRight(fullTransperentLnl, lookingVehicleLnl);
		
	}
	
	public void gonePublicTransport() {
		publicTransport.setVisibility(View.GONE);
		GeneralAnimationUtils.startLeftToRight(publicTransport, fullTransperentLnl);
		select_map.setVisibility(View.VISIBLE);
		select_menu.setVisibility(View.VISIBLE);
	}
	/**
	 * Phương thức chuyển qua lại Map B1, B2
	 */
	public void convertMap() {

		if(activemap == MAP_B1) {
			GeneralAnimationUtils.startLeftToRight(mapB1, mapB2);
			mapB1.setVisibility(View.GONE);
			mapB2.setVisibility(View.VISIBLE);
			activemap = MAP_B2;
			select_map.setText("B1");
			//showToastCustom("Bạn đang ở tầng B2 ");
			return;
		} else if(activemap == MAP_B2) {
			GeneralAnimationUtils.startRightToLeft(mapB2, mapB1);
			mapB2.setVisibility(View.GONE);
			mapB1.setVisibility(View.VISIBLE);
			select_map.setText("B2");
			activemap = MAP_B1;
			//showToastCustom("Bạn đang ở tầng B1 ");
			return;
		}
	}
	/** trả về flagViewMap */
	public boolean returnFlagViewMap() {
		return flagViewMap;
	}
	/**
	 * Xử lý khi chọn Button Parking	 */
	public void clickParking(){
		/**Ẩn các button trên map  */
		select_map.setVisibility(View.GONE);
		select_menu.setVisibility(View.GONE);

		setTabStatus(TAB_PARKING);
		webRoyalcity.setVisibility(View.GONE);
		sendFeedBack.setVisibility(View.GONE);
		parking.setVisibility(View.VISIBLE);
		parking.showParking();
		int preTabStatus = getPreTabStatus();
		if (preTabStatus == TAB_SEARCH) {
			tabStatus = TAB_PARKING;
			GeneralAnimationUtils.startRightToLeft(searchMap, parking);
			searchMap.setVisibility(View.GONE);
		} else if (preTabStatus == TAB_HOME) {
			tabStatus = TAB_PARKING;
			GeneralAnimationUtils.startRightToLeft(mapViewing, parking);
			mapViewing.setVisibility(View.GONE);
		} else if(preTabStatus == TAB_WEB) {
			tabStatus = TAB_PARKING;
			GeneralAnimationUtils.startRightToLeft(webRoyalcity, parking);
			webRoyalcity.setVisibility(View.GONE);
			
		} else if(preTabStatus == TAB_FEED_BACK) {
			tabStatus = TAB_PARKING;
			GeneralAnimationUtils.startRightToLeft(sendFeedBack, parking);
			sendFeedBack.setVisibility(View.GONE);
		}
		
		/** ẩn tìm kiếm nhanh nếu đang hiển thị */
		if(fasterSearchIsView == true) {
			searchFaster.setVisibility(View.GONE);
			btnMap.setText("Bản đồ");
			fasterSearchIsView = false;
		}
		btnMap.setText("Bản đồ");
		btnSearch.setFooterFocus(false);
		btnMap.setFooterFocus(false);
		btnParking.setFooterFocus(true);
		footer.invalidate();
	}
	/**
	 * xử lý khi chọn Button Map
	 */
	public void clickMap(){
		
		setTabStatus(TAB_HOME);
		mapViewing.setVisibility(View.VISIBLE);
		select_map.setVisibility(View.VISIBLE);
		select_menu.setVisibility(View.VISIBLE);
		int preTabStatus = getPreTabStatus();
		if (preTabStatus == TAB_SEARCH) {
			tabStatus = TAB_HOME;
			GeneralAnimationUtils.startRightToLeft(searchMap, mapViewing);
			searchMap.setVisibility(View.GONE);
		} else if (preTabStatus == TAB_PARKING) {
			tabStatus = TAB_HOME;
			GeneralAnimationUtils.startLeftToRight(parking, mapViewing);
			parking.setVisibility(View.GONE);
			
			}else if(preTabStatus == TAB_HOME) {
				if(flagDirection == false && cancelDanDuong == false) {
					if(fasterSearchIsView == false) {
						btnMap.setText("Ẩn");
						searchFaster.setVisibility(View.VISIBLE);
						searchFaster.showSearchFaster();
						GeneralAnimationUtils.startBottomToTop(searchFaster);
						fasterSearchIsView = true;
						
					}else {
						fasterSearchIsView = false;
						searchFaster.setVisibility(View.GONE);
						GeneralAnimationUtils.startTopToBottom(searchFaster);
						btnMap.setText("Bản đồ");
					}
					
				} else {
					if(flagDirection == true) {
						if(floorFromPosition.compareToIgnoreCase(floorToPosition) == 0 && floorFromPosition.compareToIgnoreCase("B1") == 0) {
							/**thực hiện chức năng dẫn đường */
							mapB1.guidePath(currentlyLocation, toLocation);
							mapB1.invalidate();
						} else {// 2 điểm thuộc 2 tầng khác nhau thì không cho phép dẫn đường
							 AlertDialog.Builder alertDialog = new AlertDialog.Builder(RoyalMapActivity.this);
							 alertDialog.setTitle("Chưa thể dẫn đường ?");
							 if(floorFromPosition.compareToIgnoreCase("B1") == 0) {
								 alertDialog.setMessage("Hãy đến B2 và chọn lại điểm hiện tại ?");
								 alertDialog.setIcon(R.drawable.royalmap_icon);
								 alertDialog.setNegativeButton("Thoát",
										 new DialogInterface.OnClickListener() {
										 
											public void onClick(DialogInterface dialog,
											 int which) {	
												flagDirection = false;
												currentlyLocation = 0;
												fromToAddresslnl.setVisibility(View.GONE);
												btnMap.setText("Bản đồ");
												 if(activemap == MAP_B2) {
													 mapB2.setVisibility(View.GONE);
													 mapB1.setVisibility(View.VISIBLE);
													 GeneralAnimationUtils.startRightToLeft(mapB2, mapB1);
													 activemap = MAP_B1;
													 
												 }
												
											 }
										 });
										 alertDialog.show();
							 } else if(floorFromPosition.compareToIgnoreCase("B2") == 0){
								 alertDialog.setMessage("Hãy đến B1 và chọn lại điểm hiện tại ?");
								 alertDialog.setIcon(R.drawable.royalmap_icon);
								 alertDialog.setNegativeButton( "Thoát",
								 new DialogInterface.OnClickListener() {
								 public void onClick(DialogInterface dialog,
								 int which) {
									flagDirection = false;
									currentlyLocation = 0;
									fromToAddresslnl.setVisibility(View.GONE);
									btnMap.setText("Bản đồ");
									 if(activemap == MAP_B2) {
										 mapB2.setVisibility(View.GONE);
										 mapB1.setVisibility(View.VISIBLE);
										 GeneralAnimationUtils.startRightToLeft(mapB2, mapB1);
										 activemap = MAP_B1;
										 
									 }
								 }
								 });
								 alertDialog.show();
							 }
							
						}
						
					}
					if(cancelDanDuong == true) {
						/**hủy bỏ tuyến đã vẽ đường đi ngắn nhất,set mặc định lại tất cả  */
						currentlyLocation = 0;
						toLocation = 0;
						flagDirection = false;
						mapB1.paintPath = false;
						cancelDanDuong = false;
						btnMap.setText(getResources().getString(R.string.footer_btn_map));
						/**Ẩn layout hiển thị thông tin các vị trí from, to */
						if(fromToAddresslnl.getVisibility() == View.VISIBLE) {
							fromToAddresslnl.setVisibility(View.GONE);
							GeneralAnimationUtils.startRightToLeft(fromToAddresslnl, fullTransperentLnl);
							viTriHienTai.setVisibility(View.GONE);
							vitriMuonDen.setVisibility(View.GONE);
						}
						mapB1.invalidate();	
					}
				}
				
				
			} else if(preTabStatus == TAB_WEB) {
				tabStatus = TAB_HOME;
				btnMap.setText("Bản đồ");
				GeneralAnimationUtils.startLeftToRight(webRoyalcity, mapViewing);
				webRoyalcity.setVisibility(View.GONE);
			
			} else if(preTabStatus == TAB_FEED_BACK) {
			tabStatus = TAB_HOME;
			btnMap.setText("Bản đồ");
			GeneralAnimationUtils.startLeftToRight(sendFeedBack, mapViewing);
			sendFeedBack.setVisibility(View.GONE);
			
			}
		btnSearch.setFooterFocus(false);
		btnMap.setFooterFocus(true);
		btnParking.setFooterFocus(false);
		footer.invalidate();
		
	}

	/**Xử lý khi chọn Button Search */
	public void clickSearch(){
		setTabStatus(TAB_SEARCH);
		select_map.setVisibility(View.GONE);
		select_menu.setVisibility(View.GONE);
		webRoyalcity.setVisibility(View.GONE);
		sendFeedBack.setVisibility(View.GONE);
		
		searchMap.setVisibility(View.VISIBLE);
		searchMap.showSearchMap();
		int preTabStatus = getPreTabStatus();
		if (preTabStatus == TAB_PARKING) {
			tabStatus = TAB_SEARCH;
			GeneralAnimationUtils.startLeftToRight(parking, searchMap);
			parking.setVisibility(View.GONE);
		} else if (preTabStatus == TAB_HOME) {
			tabStatus = TAB_SEARCH;
			GeneralAnimationUtils.startLeftToRight(mapViewing, searchMap);
			mapViewing.setVisibility(View.GONE);
		} else if(preTabStatus == TAB_WEB) {
			tabStatus = TAB_SEARCH;
			GeneralAnimationUtils.startLeftToRight(webRoyalcity, searchMap);
			webRoyalcity.setVisibility(View.GONE);
		} else if(preTabStatus == TAB_FEED_BACK) {
			tabStatus = TAB_SEARCH;
			GeneralAnimationUtils.startLeftToRight(sendFeedBack, searchMap);
			sendFeedBack.setVisibility(View.GONE);
		}
		/** ẩn tìm kiếm nhanh nếu đang hiển thị */
		if(fasterSearchIsView == true) {
			searchFaster.setVisibility(View.GONE);
			btnMap.setText("Bản đồ");
			fasterSearchIsView = false;
		}
		btnMap.setText("Bản đồ");
		btnSearch.setFooterFocus(true);
		btnMap.setFooterFocus(false);
		btnParking.setFooterFocus(false);
		footer.invalidate();
	}
	
	/**
	 * @author haoDV Cập nhật danh sách tìm kiếm của location
	 */

	public ArrayList<Location> getSearchedList(ArrayList<Location> srcList,
			String searchedStr) {

		String foundStr = CharactersMark.convertFoundString(searchedStr)
				.toLowerCase();
		ArrayList<Location> companyListShow = new ArrayList<Location>();
		for (int i = 0; i < srcList.size(); i++) {
			Location location = srcList.get(i);
			String inputStr = CharactersMark.convertFoundString(
					location.comparedStr).toLowerCase();
			if (inputStr.contains(foundStr)) {
				companyListShow.add(location);
			}
			
		}
		
		return companyListShow;
	}
	
	/**
	 * Ẩn bàn phím khi chạm vào view không phải là EditText
	 * 
	 * @param view
	 */
	public void hiddenKeyboardForView(EditText view) {

		InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
		inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
	}

	
	public  void setTabStatus(int tabStatus) {
		setPreTabStatus(this.tabStatus);
		this.tabStatus = tabStatus;
	}
	public  void setPreTabStatus(int preTabStatus) {
		this.preTabStatus = preTabStatus;
	}

	public int getPreTabStatus() {
		return preTabStatus;
	}
	public int getTabStatus() {
		return tabStatus;
	}
	public void setOnBackPressedInterface(
			OnBackPressedInterface onBackPressedInterface) {
		this.onBackPressedInterface = onBackPressedInterface;
	}
	/**   
	  Chuyển từ tab parking sang tab home khi nhấn nút back của hệ điều hành*/
	public void moveTabParkingToHome() {
		GeneralAnimationUtils.startLeftToRight(parking, returnMapView());
		returnMapView().setVisibility(View.VISIBLE);
		select_map.setVisibility(View.VISIBLE);
		select_menu.setVisibility(View.VISIBLE);
		parking.setVisibility(View.GONE);
		btnMap.setFooterFocus(true);
		btnParking.setFooterFocus(false);
		btnSearch.setFooterFocus(false);
		footer.invalidate();
		setTabStatus(TAB_HOME);
	}
	
	
	public void moveTabSearchMapToHome() {
		GeneralAnimationUtils.startRightToLeft(searchMap, returnMapView());
		returnMapView().setVisibility(View.VISIBLE);
		searchMap.setVisibility(View.GONE);
		btnMap.setFooterFocus(true);
		btnParking.setFooterFocus(false);
		btnSearch.setFooterFocus(false);
		footer.invalidate();
		setTabStatus(TAB_HOME);
	}
	// xử lý tính năng chụp ảnh
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	      if (requestCode == CAMERA_REQUEST) {
	       Bitmap photo = (Bitmap) data.getExtras().get("data");
	      
	       //lưu ảnh vào thẻ nhớ
	       File sdCardDirectory = Environment.getExternalStorageDirectory();
	       String namePhoto = "";
	       // chức năng chụp ảnh cho phép chụp tối đa 3 ảnh
	       switch (takePhoto) {
		case 1:
			namePhoto = "anhchup1.png";
			parking.generalLayout.parkingMapLayout.anhChup1.setImageBitmap(photo);
			parking.generalLayout.parkingMapLayout.anhChup1.setVisibility(View.VISIBLE);
			String time1 = saveTimeTakePhoto(1);
			parking.generalLayout.parkingMapLayout.timeTakePhoto.setText(time1+"");
			break;
		case 2:
			namePhoto = "anhchup2.png";
			parking.generalLayout.parkingMapLayout.anhChup2.setImageBitmap(photo);
			parking.generalLayout.parkingMapLayout.anhChup2.setVisibility(View.VISIBLE);
			String time2 = saveTimeTakePhoto(2);
			parking.generalLayout.parkingMapLayout.timeTakePhoto.setText(time2+"");
			break;
		case 3:
			namePhoto = "anhchup3.png";
			parking.generalLayout.parkingMapLayout.anhChup3.setImageBitmap(photo);
			parking.generalLayout.parkingMapLayout.anhChup3.setVisibility(View.VISIBLE);
			String time3 = saveTimeTakePhoto(3);
			parking.generalLayout.parkingMapLayout.timeTakePhoto.setText(time3+"");
			break;
		default:
			break;
		}
       
       File image = new File(sdCardDirectory, namePhoto);
       // Encode the file as a PNG image.
       FileOutputStream outStream;
       try {

           outStream = new FileOutputStream(image);
           photo.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
           /* 100 to keep full quality of the image */
           outStream.flush();
           outStream.close();
       } catch (FileNotFoundException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       }
       
      }
	    
	}
	public String saveTimeTakePhoto(int i) {
		String text ="";
		//Lấy về thời gian hệ thống, để lưu lại thời gian
		Calendar calendar =  GregorianCalendar.getInstance();
		int year = calendar.get(Calendar.YEAR);
		int month = calendar.get(Calendar.MONTH) + 1;
		int day = calendar.get(Calendar.DATE);
		int hour = calendar.get(Calendar.HOUR_OF_DAY);
		int min = calendar.get(Calendar.MINUTE);
		String time = hour + "h " +min + "ph" + " ngày " +day + "/" + month + "/" + year;
		text += "Chụp lúc: " + time;
		String sdcard="";
		// đường dẫn lưu file txt trong sdcard
		switch (i) {
		case 1:
			sdcard = Environment
			 .getExternalStorageDirectory()
			 .getAbsolutePath()+"/timePhoto1.txt";
			break;
		case 2:
			sdcard = Environment
			 .getExternalStorageDirectory()
			 .getAbsolutePath()+"/timePhoto2.txt";
			break;
		case 3:
			sdcard = Environment
			 .getExternalStorageDirectory()
			 .getAbsolutePath()+"/timePhoto3.txt";
			break;
		default:
			break;
		}
		
		 try {
		 OutputStreamWriter writer=
		 new OutputStreamWriter(
		 new FileOutputStream(sdcard));
		 writer.write(text);
		 writer.close();
		 } catch (FileNotFoundException e) {
		 e.printStackTrace();
		 } catch (IOException e) {
		 e.printStackTrace();
		 }
		 return text;
	}

	
	
		
}
